<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>
    // Symbol应用 消除魔术字符串: 
    // 魔术字符串指的是，在代码之中多次出现、与代码形成强耦合的某一个具体的字符串或者数值。风格良好的代码，应该尽量消除魔术字符串，改由含义清晰的变量代替



    // 在Math上追加一个新的方法  => 随机指定范围的整数 
    // 新的方法名 就可能和以前的方法名冲突
    // 1. 自己指定新方法名
    // 2. 在方法明前加前缀 _xxx
    // 3. 通过 ES6 引入Symbol的原因 创建一个独一无二的属性  => 作为对象的属性名 (只能用中括号语法)

    var a = Symbol("random123"); // a => 保存Symbol()这个值

    Math[a] = function (min, max) {  // 100 - 999
        // debugger;
        // 参数处理
        if (!Number.isInteger(min)) {
            // !Number.isInteger(min) == true =>  Number.isInteger(min) == false
            var err = new Error("Parameter 1 must be an integer");  //创建错误
            throw err; // 抛出错误
        }
        if (!Number.isInteger(max)) {
            // !Number.isInteger(min) == true =>  Number.isInteger(min) == false
            var err = new Error("Parameter 2 must be an integer");  //创建错误
            throw err; // 抛出错误
        }

        if (min > max) {
            var err = new Error("Parameter 1 must be less than parameter 2");  //创建错误
            throw err; // 抛出错误
        }

        return min + Math.round(Math.random() * (max - min));
    }

    console.log(Math); // 官方给定对象

    // Math.rand(0.1, 0.5);
    // Math.rand(1, 0.5);
    // Math.rand(200, 100);

    var result = Math[a](100, 200);
    console.log(result);

</script>

</html>